//对JSON文件中的数据,进行增删改查操作.

//拼接 db.json文件的路径
let { join } = require('path')
let filename = join(__dirname, 'db.json') // 得到db.json的绝对路径

let { readFile, writeFile } = require('fs') //加载fs模块中的两个方法

// ----------- 查询  : 获取JSON文件中的数据 --------------------------------
function query() {
  readFile(filename, 'utf-8', (err, data) => {
    if (err) throw err
    let res = JSON.parse(data) // 把JSON转成JS数组
    console.log(res)
  })
}

// query()

// -------------- 添加 : 向JSON文件中添加一条数据 ---------
/* 
  row 新增的图书,格式:{bookname:'史记',author:'司马迁',publisher:'北京出版社'}
*/
function add(row) {
  //1,先读取,得到全部的图书(转为数组)
  readFile(filename, 'utf-8', (err, data) => {
    if (err) throw err
    let res = JSON.parse(data)
    //2,把新书加入进去
    let id = res[res.length - 1].id + 1
    row.id = id
    res.push(row)
    console.log(res)
    //3,把全部的图书,重新写入到db.json中
    writeFile(filename, JSON.stringify(res), (err) => {
      if (err) throw err
      console.log('添加成功')
    })
  })
}

// add({ bookname: '朝花夕拾', author: '鲁迅', publisher: '北京出版社' })

// ------------ 删除 : 从JSON文件中删除数据 ------------
// 参数  id
function del(id) {
  //函数名不能叫做delete 因为delete是一个关键字
  //1,获取全部数据
  readFile(filename, 'utf-8', (err, data) => {
    if (err) throw err
    let res = JSON.parse(data)
    // console.log(res)
    //2,根据条件删除一本书
    let result = res.filter((item) => item.id != id)
    //3,把剩余的图书重新存起来
    writeFile(filename, JSON.stringify(result), (err) => {
      if (err) throw err
      console.log('删除成功')
    })
  })
}

// del(5)

// ------------ 修改 : 从JSON文件中修改数据 ------------
function update(row) {
  //1,先把所有数据取出来
  readFile(filename, 'utf-8', (err, data) => {
    if (err) throw err
    let res = JSON.parse(data)
    //2,修改
    //先根据条件找到索引
    let index = res.findIndex(item =>item.id == row.id);
    //从索引的位置开始,删除一条数据,并且把新的row加入
    res.splice(index,1,row);

    //3,再把全部数据重新存起来
    writeFile(filename, JSON.stringify(result), (err) => {
      if (err) throw err
      console.log('修改成功')
    })
  })
}

update({ id: 4, bookname: '斗破苍穹', author: '土豆', publisher: '仙侠出版社' })
